package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IProductTypeDAO;
import org.jsola.hr.dto.ProductTypeAddDTO;
import org.jsola.hr.dto.ProductTypeUpdateDTO;
import org.jsola.hr.entity.ProductTypeDO;
import org.jsola.hr.query.ProductTypeQuery;
import org.jsola.hr.vo.ProductTypeListVO;
import org.jsola.hr.vo.ProductTypeVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 产品分类
 *
 * @author zhr
 */
public interface IProductTypeService extends IService<IProductTypeDAO, ProductTypeDO> {

    /**
     * 新增产品分类
     * @param productTypeAddDTO 新增产品分类DTO
     * @param tokenUser 当前用户
     * @return 产品分类详情信息
     */
    ProductTypeVO save(ProductTypeAddDTO productTypeAddDTO, TokenUser tokenUser);

    /**
     * 修改产品分类
     * @param productTypeUpdateDTO 修改产品分类DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(ProductTypeUpdateDTO productTypeUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除产品分类，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param productTypeIds 产品分类id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...productTypeIds);

    /**
     * 根据产品分类id查找
     * @param productTypeId 产品分类id
     * @param siteId 所属站点id
     * @return 产品分类详情信息
     */
    ProductTypeVO selectById(String productTypeId, String siteId);

    /**
     * 查询产品分类
     * @param productTypeQuery 查询条件
     * @param siteId 所属站点id
     * @return 产品分类列表信息
     */
    List<ProductTypeListVO> select(ProductTypeQuery productTypeQuery, String siteId);

    /**
    * 查询产品分类记录数
    * @param productTypeQuery 查询条件
    * @param siteId 所属站点id
    * @return 产品分类记录数
    */
    int selectCount(ProductTypeQuery productTypeQuery, String siteId);

    /**
     * 分页查询产品分类
     * @param productTypeQuery 查询条件
     * @param siteId 所属站点id
     * @return 产品分类列表信息
     */
    Page<ProductTypeListVO> selectPage(ProductTypeQuery productTypeQuery, String siteId);


    /**
     * 根据产品分类id查找
     * @param productTypeId 产品分类id
     * @param siteId 所属站点id
     * @return 产品分类
     */
    ProductTypeDO selectDOById(String productTypeId, String siteId);

    /**
     * 查询产品分类
     * @param productTypeQuery 查询条件
     * @param siteId 所属站点id
     * @return 产品分类列表
     */
    List<ProductTypeDO> selectDO(ProductTypeQuery productTypeQuery, String siteId);


    /**
     * 查询租户下产品分类
     * @param siteId 所属站点id
     * @return 产品分类列表
     */
    List<ProductTypeDO> selectBySite(String siteId);
}


